package com.testaidl;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Auth：yujunyao
 * Since: 2016/6/1 10:14
 * Email：yujunyao@yonglibao.com
 * 比Serializable 效率更高的序列化类
 */
public class Person implements Parcelable {

    /***
     * Parcelable需要实现三个函数：
     1) void writeToParcel(Parcel dest, int flags) 将需要序列化存储的数据写入外部提供的Parcel对象dest。而看了网上的代码例子，个人猜测，读取Parcel数据的次序要和这里的write次序一致，否则可能会读错数据。具体情况我没试验过！
     2) describeContents() 没搞懂有什么用，反正直接返回0也可以
     3) static final Parcelable.Creator对象CREATOR  这个CREATOR命名是固定的，而它对应的接口有两个方法：
     createFromParcel(Parcel source) 实现从source创建出JavaBean实例的功能

     newArray(int size) 创建一个类型为T，长度为size的数组，仅一句话（return new T[size])即可。估计本方法是供外部类反序列化本类数组使用
     */


    private String name;
    private int age;

    public Person() {}

    public Person(Parcel pl){
        // 注意：读取字段的顺序一定要和writeToParcel中写入的顺序一致！
        name = pl.readString();
        age = pl.readInt();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {

        @Override
        public Person createFromParcel(Parcel source) {
            return new Person(source);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
}
